package br.edu.ufcg.nokia.battleship;

/**
 * 
 * Esta classe simula um navio de um jogo Batalha Naval. Um Navio apos ser
 * criado, pode ser afundado aos poucos ate que esteja completamente 
 * afundado.<p>
 * 
 * Existem varios tipos de Navios, sendo que cada um possui um tamanho e um tipo
 * correspondente. Os Navios utilizados neste projeto sao:<p>
 * 
 * Fragata:     Eh um Navio do tipo 2, cujo tamanho tambem eh 2;<br>
 * Destroier:   Eh um Navio do tipo 3, cujo tamanho tambem eh 3;<br>
 * Encouracado: Eh um Navio do tipo 4, cujo tamanho tambem eh 4;<br>
 * Porta-Aviao: Eh um Navio do tipo 5, cujo tamanho tambem eh 5;<br>
 * Submarino:   Eh um Navio do tipo 6, seu tamanho foge da logica do outros 
 *              navios, onde o tamanho eh igual ao tipo, neste caso o tamanho
 * 				eh 3 e nao 6; 
 * 
 * @author Miguel Queiroga, Jackson Azevedo, Edmilson Almeida, Jose Luis
 * @version 1.1
 * 
 */

public class Navio {

	/**
	 * Representa o navio FRAGATA.
	 */

	public static final int FRAGATA = 2;

	/**
	 * Representa o Navio DESTROIER.
	 */

	public static final int DESTROIER = 3;

	/**
	 * Representa o Navio ENCOURACADO.
	 */

	public static final int ENCOURACADO = 4;

	/**
	 * Representa o Navio PORTA_AVIOES.
	 */

	public static final int PORTA_AVIOES = 5;

	/**
	 * Representa o Navio SUBMARINO.
	 */

	public static final int SUBMARINO = 6;
	
	/*
	 * Indica se o navio esta afundado completamente ou nao.  
	 */
	private boolean estaAfundado;

	/*
	 * Indica o tipo (tamanho) do Navio.
	 */
	private int tamanho;

	/**
	 * Construtor para um navio
	 * @param tipo O tipo da Navio.
	 * O tipo para o navio sera: <tt>Navio.FRAGATA</tt><br><tt>Navio.DESTROIER</tt><br>
	 * <tt>Navio.ENCOURACADO</tt><br><tt>Navio.PORTA_AVIOES</tt><br><tt>Navio.SUBMARINO</tt>
	 */

	public Navio(int tipo) {
		if (tipo == Navio.SUBMARINO) // Teste feito por existir dois navios 
			tamanho = 3;             // de mesmo tamanho.			
		else  this.tamanho = tipo;
		this.estaAfundado = false;
	}

	/**
	 * Verifica se o navio esta completamente afundado.
	 * @return <tt>true</tt> se conseguiu afundar completamente.
	 * <tt>false</tt> caso contrario.
	 */

	public boolean isAfundado() {
		return estaAfundado;
	}

	/**
	 * Obtem o tamanho do navio. 
	 * @return o valor do tamanho do navio.
	 */

	public int getTamanho() {
		return tamanho;
	}

	/**
	 * Afunda qualquer pedaco do navio.
	 */
	
	public void afundaPedaco() {
		tamanho--;
		if (tamanho == 0)
			estaAfundado = true;		
	}
}